#ifndef HANDLERCONNECTCOMPONENTS_H_
#define HANDLERCONNECTCOMPONENTS_H_

#include "Handler.h"
#include "gui/VisualComponents/VisualComponentConector.h"
#include "gui/VisualComponents/ArrowHead.h"
#include "../../model/clases/ViaClasses.h"

class HandlerConnectComponents: public Handler {

public:

	/**
	 * @param
	 * @param es el conector sobre el cual se clickeo y se quiere establecer
	 * una conexion.
	 */
	HandlerConnectComponents(DrawingAreaPlusPlus* drawArea, VisualComponentConector* conector, ArrowHead::ArrowStyle style);

	virtual ~HandlerConnectComponents();

	/**
	 * @brief va dibujando la linea de la conexion.
	 * @param event
	 * @param touchedComponent
	 */
	virtual void on_motion_notify_event(GdkEventMotion* event, VisualDiagramComponent* touchedComponent);

	/**
	 * trata de conectar el conector anterior con el touchedComponent
	 * @param event
	 * @param touchedComponent
	 */
	virtual void on_left_click_release_event(GdkEventButton* event, VisualDiagramComponent* touchedComponent);

private:
	//conector sobre el que se presiono
	VisualComponentConector* m_conector;
	VisualComponentConector* m_destinyConnector;
	ArrowHead::ArrowStyle style;

	ViaClasses::TipoDeRelacionEntreClases getTipoRel(ArrowHead::ArrowStyle sty) {
			switch (sty) {
				case ArrowHead::ARROW_LINE:
					return ViaClasses::TipoDeRelacionEntreClasesAsociacion;
					break;
				case ArrowHead::ARROW_DIAMOND:
					return ViaClasses::TipoDeRelacionEntreClasesAgregacion;
					break;
				case ArrowHead::ARROW_DIAMOND_FILLED:
					return ViaClasses::TipoDeRelacionEntreClasesComposicion;
					break;
				case ArrowHead::ARROW_SOLID:
					return ViaClasses::TipoDeRelacionEntreClasesHerencia;
					break;
				case ArrowHead::ARROW_OPEN:
					return ViaClasses::TipoDeRelacionEntreClasesDependencia;
					break;
				default:
					return ViaClasses::TipoDeRelacionEntreClasesAsociacion;
					break;
			}
		}

};

#endif /* HANDLERCONNECTCOMPONENTS_H_ */
